package com.czl.category.util;

import com.czl.category.test.entity.common.Page;
import com.czl.category.test.entity.common.PageParam;
import lombok.experimental.UtilityClass;
import org.apache.commons.lang3.math.NumberUtils;

import java.util.ArrayList;
import java.util.List;

/**
 * TODO
 *
 * @author yugt
 * @description
 * @date 2021/1/19 10:15
 */
@UtilityClass
public class PageUtil {
    public static <T> void setPagesByHands(PageParam pageParam, List<T> lists, Page<T> pages) {
        if (!lists.isEmpty()) {
            Double pageNo = 1.00;
            if (NumberUtils.isCreatable(pageParam.getPageNo())) {
                pageNo = Double.valueOf(pageParam.getPageNo());
            }
            Double pageSize = 10.00;
            if (NumberUtils.isCreatable(pageParam.getPageSize())) {
                pageSize = Double.valueOf(pageParam.getPageSize());
            }
            Integer total = lists.size();
            Double totalPages = total / Double.valueOf(pageSize);
            totalPages = Math.ceil(totalPages);
            Integer lastPageSize = total % pageSize.intValue();
            pages.setTotal(Long.valueOf(total));
            pages.setPageNo((int) (double) pageNo);
            List<T> outList = new ArrayList<>();
            // 只有一页
            if (new Double(1).equals(totalPages)) {
                pages.setEntitiesInPage(lists);
                pages.setHasNextPage(false);
                pages.setHasPreviousPage(false);
                pages.setPagesCount(total);
            }
            // 超过一页&&传入页码==1
            if (new Double(1).equals(pageNo)) {
                if (lists.size() <= pageSize) {
                    pages.setEntitiesInPage(lists);
                    pages.setHasNextPage(false);
                    pages.setHasPreviousPage(false);
                    pages.setPagesCount(total);
                } else {
                    for (int i = 0; i < pageSize; i++) {
                        outList.add(lists.get(i));
                    }
                    pages.setEntitiesInPage(outList);
                    pages.setHasNextPage(true);
                    pages.setHasPreviousPage(false);
                    pages.setPagesCount(outList.size());
                }
            } else {
                // 超过一页
                int no = 1;
                for (int i = 1; i < total + 1; i++) {
                    if (no == pageNo) {
                        for (int j = i - 1; j < i + pageSize-1; j++) {
                            if(j==lists.size()) {
                                break;
                            }
                            outList.add(lists.get(j));
                        }
                        break;
                    }
                    if (i % pageSize == 0) {
                        no++;
                    }
                }
                pages.setEntitiesInPage(outList);
                if (pageNo.equals(totalPages)) {
                    pages.setHasNextPage(false);
                } else {
                    pages.setHasNextPage(true);
                }
                pages.setHasPreviousPage(true);
                pages.setPagesCount(outList.size());
            }
        }
    }
}
